package board.model.service;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import board.domain.Board;
import board.domain.PagingBean;
import board.model.dao.BoardDAO;
import board.util.Utilities;

@Service
public class BoardServiceImpl implements BoardService {
	
	@Autowired
	private BoardDAO boardDAO;
	

	public void setBoardDAO(BoardDAO boardDAO) {
		this.boardDAO = boardDAO;
	}


	//글입력 처리를 하는 Business 메소드
	@Override
	public void writeContent(Board board) throws SQLException{
		
		String writeDate = Utilities.getNow();
		String c = Utilities.changeContentForDB(board.getContent());
		board.setWritedate(writeDate);
		board.setContent(c);
		//2
		boardDAO.insertContentForNewCount(board);
		
	}
	
	@Override
	public Board getContentByNO(int no) throws SQLException{
		//1. 조회수 증가
		boardDAO.updateViewCount(no);
		//2. no로 글 정보 조회
		Board board = boardDAO.selectContentByNO(no);
		//2-1 writedate를 yyyy.MM.dd HH:mm:ss 형식으로 변경
		board.setWritedate(Utilities.changeDayTimeFormat(board.getWritedate()));
		return board;
	}
	@Override
	public Board getContentByNoForForm(int no) throws SQLException{
		//1. no값으로 글 조회
		Board board = boardDAO.selectContentByNO(no);
		//2. content를 textarea용으로 변경
		board.setContent(Utilities.changeContentForTextArea(board.getContent()));
		return board;
	}
	@Override
	public void modifyContent(Board board) throws SQLException{
		//1. property변경 - content, writedate
		board.setContent(Utilities.changeContentForDB(board.getContent()));
		board.setWritedate(Utilities.getNow());
		//2. 수정 처리
		boardDAO.updateContent(board);
		
	}
	@Override
	public void deleteContentByNO(int no) throws SQLException{
		boardDAO.deleteContentByNO(no);
	}
	/**
	 * 답변 처리 메소드
	 * 1. 답변하려는 글과 같은 refamily를 가진 글들의 restep을 1씩 증가하도록 update
	 * 2. 매개변수로 받은 Board의 restep, relevel의 값은 원본글의 값이므로 1씩 증가 시킨다.
	 * 3. 매개변수로 받은 Board writeDate 포멧 변경, 글내용 변경 - Utilities 이용
	 * 4. 글 등록
	 */
	@Override
	public void replyContent(Board board) throws SQLException{
		//1. DB에 같은 refamily의 restep들을 1씩 증가시킨다.
		
		//2. board의 restep, relevel을 1 증가시킨다.
		
		//3. insert할 글 번호를 가져온와 board에 넣는다. 
		//4. BoardDTO에 no, writeDate와 content는 DB 저장용으로 변경한다.
		
		
		//5. 새글 등록 - dao.insertContent() 이용
		
		
	}
	@Override
	public ArrayList<Board> getBoardAllList() throws SQLException{
		//1. dao로부터 전체 글내용을 ArrayList로 조회
		ArrayList<Board> list = boardDAO.selectBoardAllList();
		//2 list내의 BoardDTO객체들의 writedate를 변경
		for(Board board:list){
			board.setWritedate(Utilities.changeDayFormat(board.getWritedate()));
		}
		return list;
	}
	//페이징 리스트 조회
	/*
	 * Controller로 전달할 값(최종적으로 View에 전달할 Model)
	 * 	- 목록에 뿌려 줄 게시물들 : name : "list" = value : ArrayList<Board>
	 * 		- 각 게시물들의 날짜 포멧을 년.월.일 형태로 변경
	 * - 페이징 처리를 위한 PagingBean 객체 : name="pagingBean" value : PagingBean객체
	 */
	@Override
	public Map getBoardListByPage(int page) throws SQLException{
		HashMap map = new HashMap();//View로 전달할 model을 담을 Map
		//1. dao로부터 전체 글내용을 ArrayList로 조회
		
		
		//2 list내의 BoardDTO객체들의 writedate를 변경
		
		
		//3. PagingBean객체를 생성
		// 총 게시물수 조회

		// PagingBean 객체 생성
		
		
		return map;
	}
}






